home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / ubiquity / apt-setup / apt-setup-verify < prev    next >
Text File  |  2008-10-13  |  3KB  |  150 lines

  1. #!/bin/sh
  2. # verify and optionally save out the file
  3. set -e
  4.  
  5. ASV_TIMEOUT="${ASV_TIMEOUT:--o Acquire::http::Timeout=10}"
  6.  
  7. NL="
  8. "
  9.  
  10. NOTEST=""
  11. PROGRESS=""
  12. PROGRESS_FROM=""
  13. PROGRESS_TO=""
  14. file=""
  15. while [ "$1" ]; do
  16.     case "$1" in
  17.         --invalid)
  18.         NOTEST=1 ;;
  19.         --from)
  20.         shift
  21.         PROGRESS_FROM=$1 ;;
  22.         --to)
  23.         shift
  24.         PROGRESS_TO=$1 ;;
  25.         *)
  26.         if [ -z "$file" ]; then
  27.             file="$1"
  28.         else
  29.             saveto="$1"
  30.         fi ;;
  31.     esac
  32.     shift
  33. done
  34.  
  35. if [ "$PROGRESS_FROM" ] && [ "$PROGRESS_TO" ] && \
  36.    [ $PROGRESS_FROM -lt $PROGRESS_TO ]; then
  37.     PROGRESS=1
  38. else
  39.     DAP_OPTS="--no-progress"
  40. fi
  41.  
  42. logoutput=""
  43. if [ "$CATCHLOG" ]; then
  44.     logoutput="log-output -t apt-setup"
  45. fi
  46.  
  47. chroot=
  48. intarget=
  49. if [ "$ROOT" ]; then
  50.     chroot=chroot
  51.     intarget=in-target
  52. fi
  53.  
  54. saveline () {
  55.     if [ "$saveto" ]; then
  56.         echo "$*" >> $saveto
  57.     fi
  58. }
  59.  
  60. # Option to cancel an action does not currently work:
  61. # - application does not seem to always react to a cancel signal
  62. # - debconf-apt-progress does not exit with code 30 when cancelled
  63. # - even if it did, the exit code would be mangled by in-target
  64. # See also thread http://lists.debian.org/debian-boot/2008/01/msg00094.html
  65. valid () {
  66.     local line="$1"
  67.     local dap_opts="$2"
  68.  
  69.     [ "${line%%:*}" != "deb cdrom" ] || return 0
  70.  
  71.     # Ubuntu change: network sources are always valid; apt will cope
  72.     # gracefully later, even though the network may not be available
  73.     # now.
  74.     return 0
  75.  
  76.     tmp=$($chroot $ROOT tempfile)
  77.     echo "$line" > $ROOT$tmp
  78.     code=0
  79.     $logoutput $intarget debconf-apt-progress --logstderr $dap_opts -- \
  80.         apt-get -o APT::Get::List-Cleanup=false \
  81.             -o Dir::Etc::sourcelist=$tmp $ASV_TIMEOUT update || code=$?
  82.     if [ $code -eq 30 ]; then
  83.         exit 30 # canceled
  84.     elif [ $code -eq 0 ]; then
  85.         rm -f $ROOT$tmp
  86.     else
  87.         rm -f $ROOT$tmp
  88.         false
  89.     fi
  90. }
  91.  
  92. # Ubuntu change: need to run apt-get update for everything in one go here,
  93. # since we've disabled the run in the valid function above. Doing everything
  94. # in one go also allows apt-get to cache resolver failures and connection
  95. # timeouts and so be significantly faster when the network is unavailable.
  96. tmp=$($chroot $ROOT tempfile)
  97. cat "$file" > $ROOT$tmp
  98. $logoutput $chroot $ROOT apt-get -o APT::Get::List-Cleanup=false \
  99.     -o Dir::Etc::sourcelist=$tmp $ASV_TIMEOUT update || true
  100. rm -f $ROOT$tmp
  101.  
  102. if [ "$PROGRESS" ]; then
  103.     tot_items=$(grep -Ev "^(#.*|)[[:space:]]*$" $file | wc -l)
  104.     p_from=$PROGRESS_FROM
  105. fi
  106.  
  107. items=0
  108. gooditems=0
  109.  
  110. OLDIFS="$IFS"
  111. IFS="$NL"
  112. # Can't just iterate over $(cat $file) because that kills newlines, so
  113. # introduce a dummy colon.
  114. for line in $(sed 's/^/:/' $file); do
  115.     IFS="$OLDIFS"
  116.     line="${line#:}"
  117.     if echo "$line" | grep -Evq "^(#.*|)[[:space:]]*$"; then
  118.         items=$(expr $items + 1)
  119.         # Write blank line between generators
  120.         if [ $items = 1 ] && [ -f "$saveto" ]; then
  121.             saveline ""
  122.         fi
  123.  
  124.         if [ "$PROGRESS" ]; then
  125.             [ $items -eq 1 ] || p_from=$p_to
  126.             p_to=$(expr $PROGRESS_FROM + \
  127.                 \( $PROGRESS_TO - $PROGRESS_FROM \) \* \
  128.                 $items / $tot_items)
  129.             DAP_OPTS="--dlwaypoint 100 --from $p_from --to $p_to"
  130.         fi
  131.  
  132.         if [ -z "$NOTEST" ] && valid "$line" "$DAP_OPTS"; then
  133.             gooditems=$(expr $gooditems + 1)
  134.             saveline "$line"
  135.         else
  136.             saveline "# Line commented out by installer because it failed to verify:"
  137.             saveline "#$line"
  138.         fi
  139.     else
  140.         # Ignore leading empty lines
  141.         if [ $items -ne 0 ] || [ "$line" ]; then
  142.             saveline "$line"
  143.         fi
  144.     fi
  145. done
  146.  
  147. if [ $gooditems -ne $items ]; then
  148.     exit 1
  149. fi
  150.